﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
using Golos.Http;
using Golos.Users.UserCache;
using Golos.Web.Utils;

namespace Golos.Web
{
    public partial class logon : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //if (Request.QueryString["session"] != null)
            //{
            //    LogClass.WriteInfoEntry("Аутентификация facebook.com");
                
            //    string json = Request.QueryString["session"];

            //    FBHelper.FBSession fbSession = JSONHelper.Deserialise<FBHelper.FBSession>(json);
            //    LogClass.WriteDebugEntry(fbSession.ToString());

            //    Stopwatch stopwatch = new Stopwatch();
            //    stopwatch.Start();
            //    HttpResponse result = null;
            //    HttpWebResponse myResponse = null;

            //    Uri requestUri = new Uri("https://graph.facebook.com/me?access_token=" + fbSession.access_token);

            //    try
            //    {
            //        HttpWebRequest myRequest = (HttpWebRequest) WebRequest.Create(requestUri);

            //        myRequest.Timeout = 5000;
            //        myRequest.Method = "GET";
            //        myRequest.ContentType = "application/x-www-form-urlencoded";

            //        LogClass.WriteInfoEntry(string.Format("Send request: {0}\t{1}", myRequest.Method,
            //                                              myRequest.RequestUri.ToString()));

            //        myResponse = (HttpWebResponse) myRequest.GetResponse();

            //        result = new HttpResponse(myResponse.GetResponseStream(), myResponse.ContentLength,
            //                                  myResponse.ContentEncoding, myResponse.StatusCode);

            //        stopwatch.Stop();
            //        LogClass.WriteInfoEntry(string.Format("Complete request: {0}\t{1}\t{2}\t{3}", myRequest.Method,
            //                                              myRequest.RequestUri, myResponse.StatusCode, stopwatch.Elapsed));

            //        string fnUserJson = "";

            //        using (Stream stream = result.ResponseStream)
            //        {
            //            using (StreamReader reader = new StreamReader(stream))
            //            {
            //                while (!reader.EndOfStream)
            //                {
            //                    fnUserJson = reader.ReadLine();
            //                    LogClass.WriteDebugEntry(fnUserJson);
            //                }
            //            }
            //        }

            //       FBHelper.FBUser fbUser = JSONHelper.Deserialise<FBHelper.FBUser>(fnUserJson);
            //        LogClass.WriteDebugEntry(fbUser.ToString());

            //        try
            //        {
            //            Token secretToken = TokenUtils.CheckSecretCookie(Request.Cookies);
            //            if (secretToken != null)
            //            {
            //                //TODO: attach user;
            //            }

            //            Guid userId = HandlerBase.UsersClient.RegisterUser(fbUser.name, fbUser.email, UserIdType.FB, fbUser.id);

            //            Token token = new Token(userId, DateTime.Now.AddDays(Settings.ReadFromFile().TokenLifeTime));
            //            LogClass.WriteDebugEntry("User: " + token.User + " [net=FB, uid=" + fbUser.id + ", name=" +
            //                                     fbUser.name + ", email=" + fbUser.email + "]");

            //            TokenUtils.ToCookies(Response.Cookies, token);

            //            Response.Write("{ \"success\": \"Пользователь авторизован.\" }");
            //        }
            //        catch (Exception ex)
            //        {
            //            Response.Write("{ \"error\": \"Не удалось авторизоваться.\" }");
            //            LogClass.WriteErrorEntry("Не удалось зарегистрировать пользователя FB. [uid=" + fbUser.id +
            //                                     ", name=" + fbUser.name + ", email=" + fbUser.email + "]");
            //            LogClass.WriteErrorEntry(ex.ToString());
            //        }
            //    }
            //    catch (WebException exception)
            //    {
            //        stopwatch.Stop();
            //        LogClass.WriteWarningEntry(string.Format("Error in request: {0}\t{1}\t{2}\r\n{3}", "GET", requestUri,
            //                                               stopwatch.Elapsed, exception));
                    
            //        if (exception.Status == WebExceptionStatus.ProtocolError)
            //        {
            //            Stream responseStream = null;
            //            StreamReader readStream = null;
            //            try
            //            {
            //                responseStream = ((HttpWebResponse)exception.Response).GetResponseStream();
            //                readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8);

            //                if (readStream != null)
            //                {
            //                    string str = readStream.ReadToEnd();
            //                    LogClass.WriteDebugEntry("Response from Facebook: {0}", str);

            //                    FBHelper.FBException fbException = JSONHelper.Deserialise<FBHelper.FBException>(str);
                                
            //                    LogClass.WriteDebugEntry(fbException.error.message);
            //                }
            //            }
            //            catch (Exception ex)
            //            {
            //                LogClass.WriteErrorEntry(ex.ToString());
            //            }
            //            finally
            //            {
            //                if (readStream != null)
            //                {
            //                    readStream.Close();
            //                }
            //            }
            //        }
            //        LogClass.WriteErrorEntry("Не удалось зарегистрировать пользователя FB.");
            //    }
            //    finally
            //    {
            //        if (myResponse != null)
            //            myResponse.Close();
            //    }
            //}
        }
    }
}